#include "modeloporframoj.h"
#include<QtXml>
#include<QFile>
#include <QIODevice>

#include <QMessageBox>
//
ModeloPorFramoj::ModeloPorFramoj( QObject * parent) 
	: QAbstractItemModel(parent)
{
  // По умолчанию задаю пустое имя файла, т.к. ни один файл не открыт.
  failo = "";
  // Создаю узел документа, для работы с данными из файла. Данные будут загружены в методе apertiFailo. Удаляю в деструкторе.
  domDok = new QDomDocument();
}
ModeloPorFramoj::~ModeloPorFramoj(){
  delete domDok;
}
//

QVariant ModeloPorFramoj::data(const QModelIndex & index, int role ) const{
  if(index.isValid()
     && index.row() < this->rowCount(index.parent()) && index.row() >= 0
     && index.column() < this->columnCount(index.parent()) && index.column() >= 0){
    // Получен рабочий индекс.
    
    if(role == Qt::TipoRolo){
      // Запрашивается тип элемента.
      
      // Если элемент принадлежит корневой таблице или родительский элемент - владелец списка потомков.
      if(!index.parent().isValid() || index.parent().data(Qt::TipoRolo) == ListoPrafilo){
        // Находимся в спике фреймов.
        if(index.column() == 0){
          // Первый столбец - фрейм.
          return Framo;
        }
        if(index.column() == 01){
          // Второй столбец - владелец списка потомков фрейма.
          return ListoPrafilo;
        }
      }else{
        // Находимся в спике элементов фрейма.
        if(index.column() == 0){
          // Первый столбец - тип элемента.
          return Tipo;
        }
        if(index.column() == 01){
          // Второй столбец - элемент.
          return Elemento;
        }
      }
    }
  }
      // Если элемент принадлежит корневой таблице или родительский элемент - владелец списка потомков.
      if(!index.parent().isValid() || index.parent().data(Qt::TipoRolo) == ListoPrafilo){
        // Находимся в спике фреймов.
        if(index.column() == 0){
          // Первый столбец - фрейм.
          
        }
      }
}


Qt::ItemFlags ModeloPorFramoj::flags(const QModelIndex & index ) const{
}


QVariant ModeloPorFramoj::headerData(int section, Qt::Orientation orientation, int role ) const{
  // TODO
}


int ModeloPorFramoj::rowCount(const QModelIndex & parent ) const{
  // TODO
}


int ModeloPorFramoj::columnCount(const QModelIndex & parent ) const{
  // TODO
}


bool ModeloPorFramoj::setData(const QModelIndex & index, const QVariant & value, int role )
{
  // TODO
}


bool ModeloPorFramoj::insertRows(int row, int count, const QModelIndex & parent ){
  // TODO
}


bool ModeloPorFramoj::removeRows(int row, int count, const QModelIndex & parent ){
  // TODO
}

bool ModeloPorFramoj::insertColumns(int Columns, int count, const QModelIndex & parent ){
  // TODO
}


bool ModeloPorFramoj::removeColumns(int Columns, int count, const QModelIndex & parent ){
  // TODO
}


QModelIndex ModeloPorFramoj::index(int row, int column, const QModelIndex & parent ) const{
  // TODO
}


QModelIndex ModeloPorFramoj::parent(const QModelIndex & index ) const{
  // TODO
}

void ModeloPorFramoj::apertiFailo(QString FailaNomo){
  // Запоминаю имя файла.
  failo = FailaNomo;
  QFile file(failo);
  // Открываю файл только для чтения.
  if(file.open(QIODevice::ReadOnly)){
    // Файл открылся.
    QString e;
    int a, b;
    // Читаю данные в узел документа
    if(domDok->setContent(&file, &e, &a, &b)){}
    else{
      // Данные не прочитались.
      QMessageBox msg1(QMessageBox::Critical,trUtf8("Ошибка"),trUtf8("%1: строка %2 столбец %3").arg(e).arg(a).arg(b));
      msg1.exec();
    }
    // Закрываю файл.
    file.close();
    // Данные останутся в domDok и после закрытия файла.
  }else{
    // Не удалось открыть файл.
    QMessageBox msg2(QMessageBox::Critical,trUtf8("Ошибка"),trUtf8("Не удалось открыть файл %1.").arg(failo));
    msg2.exec();
  }
}

